﻿//using System;
//using System.Collections.Generic;
//using System.Text;
//using Microsoft.SharePoint.Administration;
//using System.Data.SqlClient;
//using System.Data;

//namespace TST.SharePointObjects
//{
//    public static class Database
//    {
//        internal const string DATABASENAME = "TST_SharePointObjects";
//        internal const int CURRENTDATABASEVERSION = 1;

//        private static string ConnectionString
//        {
//            get
//            {
//                return string.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI;", DatabaseServer, DATABASENAME);
//            }
//        }

//        private static string ConnectionStringMaster
//        {
//            get
//            {
//                return string.Format("Data Source={0};Initial Catalog={1};Integrated Security=SSPI;", DatabaseServer, "master");
//            }
//        }

//        internal static string DatabaseServer
//        {
//            get
//            {
//                try
//                {
//                    SPAdministrationWebApplication adminWeb = SPAdministrationWebApplication.Local;
//                    foreach (SPDatabase db in adminWeb.WebService.DefaultDatabaseInstance.Databases)
//                    {
//                        if (db is SPContentDatabase)
//                        {
//                            return db.Server.Name;
//                        }
//                    }
//                }
//                catch (Exception ex)
//                {
//                    TraceProvider.WriteError(ex.Message, "Database.DatabaseServer");
//                    throw ex;
//                }
//                return string.Empty;
//            }
//        }

//        internal static SqlConnection Connection
//        {
//            get
//            {
//                SqlConnection connection = null;

//                try
//                {
//                    connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//                    connection.Open();
//                    return connection;
//                }
//                catch (SqlException sqlEx)
//                {
//                    TraceProvider.WriteError(sqlEx.Message, "Database.Connection");
//                    throw sqlEx;
//                }
//                catch (Exception ex)
//                {
//                    TraceProvider.WriteError(ex.Message, "Database.Connection");
//                    throw ex;
//                }
//            }
//        }

//        internal static bool Exists
//        {
//            get
//            {
//                SqlConnection connection = null;

//                try
//                {
//                    connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//                    connection.Open();
//                    return true;
//                }
//                catch (SqlException sqlEx)
//                {
//                    TraceProvider.WriteError(sqlEx.Message, "Database.Exists");
//                    return false;
//                }
//                catch (Exception ex)
//                {
//                    TraceProvider.WriteError(ex.Message, "Database.Exists");
//                    throw ex;
//                }
//                finally
//                {
//                    CloseAndDispose(null, connection);
//                }
//            }
//        }

//        internal static DataTable GetData(SqlCommand command, CommandType commandType)
//        {
//            if (command == null || string.IsNullOrEmpty(command.CommandText))
//                return null;

//            DataSet data = new DataSet();
//            SqlConnection connection = null;
//            SqlDataAdapter adapter = null;

//            try
//            {
//                connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//                adapter = null;

//                command.Connection = connection;
//                command.CommandType = commandType;

//                connection.Open();
//                adapter = new SqlDataAdapter(command);
//                adapter.Fill(data);
//                if (data.Tables.Count == 1)
//                {
//                    return data.Tables[0];
//                }
//                return null;
//            }
//            catch (SqlException sqlEx)
//            {
//                TraceProvider.WriteError(sqlEx.Message, "Database.GetData");
//                throw new SharePointObjectsException(sqlEx.Message);
//            }
//            catch (Exception ex)
//            {
//                TraceProvider.WriteError(ex.Message, "Database.GetData");
//                throw ex;
//            }
//            finally
//            {
//                CloseAndDispose(adapter, connection);
//            }
//        }

//        //internal static DataTable GetData(SqlCommand selectCommand, SqlCommand insertCommand, SqlCommand updateCommand, out SqlDataAdapter adapter)
//        //{
//        //    if (selectCommand == null || string.IsNullOrEmpty(selectCommand.CommandText))
//        //        return null;

//        //    DataSet data = new DataSet();
//        //    SqlConnection connection = null;
//        //    //SqlDataAdapter adapter = null;

//        //    try
//        //    {
//        //        connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//        //        //adapter = null;

//        //        selectCommand.Connection = connection;
//        //        selectCommand.CommandType = CommandType.Text;

//        //        connection.Open();
//        //        adapter = new SqlDataAdapter(selectCommand);
//        //        adapter.InsertCommand = insertCommand;
//        //        adapter.UpdateCommand = updateCommand;
//        //        adapter.Fill(data);
//        //        if (data.Tables.Count == 1)
//        //        {
//        //            return data.Tables[0];
//        //        }
//        //        return null;
//        //    }
//        //    catch (SqlException sqlEx)
//        //    {
//        //        TraceProvider.WriteError(sqlEx.Message, "Database.GetData");
//        //        throw new SharePointObjectsException(sqlEx.Message);
//        //    }
//        //    catch (Exception ex)
//        //    {
//        //        TraceProvider.WriteError(ex.Message, "Database.GetData");
//        //        throw ex;
//        //    }
//        //    finally
//        //    {
//        //        CloseAndDispose(adapter, connection);
//        //    }
//        //}

//        internal static void RunStoredProcedure(SqlCommand command)
//        {
//            if (command == null || string.IsNullOrEmpty(command.CommandText))
//                return;

//            DataSet data = new DataSet();
//            SqlConnection connection = null;
//            SqlDataAdapter adapter = null;

//            try
//            {
//                connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//                adapter = null;

//                command.Connection = connection;
//                command.CommandType = CommandType.StoredProcedure;

//                connection.Open();
//                command.ExecuteNonQuery();
//                return;
//            }
//            catch (SqlException sqlEx)
//            {
//                TraceProvider.WriteError(sqlEx.Message, "Database.RunStoredProcedure");
//                throw new SharePointObjectsException(sqlEx.Message);
//            }
//            catch (Exception ex)
//            {
//                TraceProvider.WriteError(ex.Message, "Database.RunStoredProcedure");
//                throw ex;
//            }
//            finally
//            {
//                CloseAndDispose(adapter, connection);
//            }
//        }

//        internal static void CreateDatabase()
//        {
//            string sql = string.Format("CREATE DATABASE {0}", DATABASENAME);
//            try
//            {
//                RunSQLCommand(sql, true);
//            }
//            catch (Exception ex)
//            {
//                TraceProvider.WriteError(ex.Message, "Database.CreateDatabase");
//                throw ex;
//            }
//        }

//        internal static void RunSQLCommand(string sql, bool useMaster)
//        {
//            if (string.IsNullOrEmpty(sql))
//                return;

//            SqlConnection connection = null;
//            SqlDataAdapter adapter = null;

//            try
//            {
//                if (useMaster)
//                {
//                    connection = new System.Data.SqlClient.SqlConnection(ConnectionStringMaster);
//                }
//                else
//                {
//                    connection = new System.Data.SqlClient.SqlConnection(ConnectionString);
//                }
//                SqlCommand command = connection.CreateCommand();
//                command.CommandText = sql;
//                command.CommandType = CommandType.Text;
//                connection.Open();
//                command.ExecuteNonQuery();
//            }
//            catch (SqlException sqlEx)
//            {
//                TraceProvider.WriteError(sqlEx.Message, "Database.RunSQLCommand");
//                throw new SharePointObjectsException(sqlEx.Message);
//            }
//            catch (Exception ex)
//            {
//                TraceProvider.WriteError(ex.Message, "Database.RunSQLCommand");
//                throw ex;
//            }
//            finally
//            {
//                CloseAndDispose(adapter, connection);
//            }
//        }

//        private static void CloseAndDispose(SqlDataAdapter adapter, SqlConnection connection)
//        {
//            if (adapter != null)
//            {
//                adapter.Dispose();
//            }
//            if (connection != null)
//            {
//                if (connection.State == ConnectionState.Open)
//                {
//                    connection.Close();
//                }
//                connection.Dispose();
//            }
//        }

//        internal static void RunSQLFile(string sql)
//        {
//            string[] statements = sql.Split(new string[] { "GO" }, StringSplitOptions.RemoveEmptyEntries);
//            foreach (string statement in statements)
//            {
//                if (RunStatement(statement.Replace(Environment.NewLine, string.Empty)))
//                {
//                    Database.RunSQLCommand(statement, false);
//                }
//            }
//        }

//        private static bool RunStatement(string statement)
//        {
//            if (statement.ToLower().StartsWith("use "))
//                return false;
//            if (statement.ToLower().StartsWith("set "))
//                return false;
//            return true;
//        }

//        internal static SqlDataAdapter GetAdapter(SqlCommand select, SqlCommand insert, SqlCommand update, SqlCommand delete, out DataSet data, bool closeConnection)
//        {
//            SqlConnection connection = Connection;
//            data = new DataSet();
//            SqlDataAdapter adapter = null;
//            try
//            {
//                select.Connection = connection;
//                insert.Connection = connection;
//                update.Connection = connection;
//                delete.Connection = connection;

//                adapter = new SqlDataAdapter(select);
//                adapter.InsertCommand = insert;
//                adapter.UpdateCommand = update;
//                adapter.DeleteCommand = delete;

//                adapter.Fill(data);
//                return adapter;
//            }
//            catch (Exception ex)
//            {
//                TraceProvider.WriteError(ex.Message, "Database.GetAdapter");
//                throw ex;
//            }
//            finally
//            {
//                // Do not dispose the adapter; needed for update operarations.
//                if (closeConnection)
//                {
//                    CloseAndDispose(null, connection);
//                }
//            }
//        }


//        internal static int UpdateData(SqlDataAdapter _adapter, DataTable data)
//        {
//            if (_adapter == null)
//                return 0;
//            int result = _adapter.Update(data);
//            if (_adapter.UpdateCommand.Connection.State == ConnectionState.Open)
//            {
//                _adapter.UpdateCommand.Connection.Close();
//                _adapter.UpdateCommand.Dispose();
//            }
//            if (_adapter.InsertCommand.Connection.State == ConnectionState.Open)
//            {
//                _adapter.InsertCommand.Connection.Close();
//                _adapter.InsertCommand.Dispose();
//            }
//            if (_adapter.DeleteCommand.Connection.State == ConnectionState.Open)
//            {
//                _adapter.DeleteCommand.Connection.Close();
//                _adapter.DeleteCommand.Dispose();
//            }
//            if (_adapter.SelectCommand.Connection.State == ConnectionState.Open)
//            {
//                _adapter.SelectCommand.Connection.Close();
//                _adapter.SelectCommand.Dispose();
//            }
//            return result;
//        }

//    }
    
//}
